﻿package mortal.game.scene3D.map3D.mapToMapPath
{
    import Message.DB.Tables.*;
    import Message.Public.*;
    import __AS3__.vec.*;
    import flash.utils.*;
    import mortal.game.resource.*;
    import mortal.game.scene3D.layer3D.utils.*;
    import mortal.game.scene3D.map3D.sceneInfo.*;

    public class MapPathSearcher extends Object
    {

        public function MapPathSearcher()
        {
            return;
        }// end function

        public static function findMapPath(param1:int, param2:int) : Vector.<SPassPoint>
        {
            var _loc_9:MapPathLink = null;
            var _loc_11:int = 0;
            var _loc_12:MapPathLink = null;
            var _loc_13:SceneInfo = null;
            var _loc_14:Boolean = false;
            var _loc_15:SPassPoint = null;
            var _loc_16:SPassTo = null;
            var _loc_17:int = 0;
            var _loc_18:TCopy = null;
            if (param1 == param2)
            {
                return null;
            }
            var _loc_3:* = SceneConfig.instance.getSceneInfo(param1);
            var _loc_4:* = SceneConfig.instance.getSceneInfo(param2);
            if (_loc_3 == null || _loc_4 == null)
            {
                return null;
            }
            var _loc_5:Array = [];
            var _loc_6:* = new Dictionary();
            var _loc_7:* = new Dictionary();
            var _loc_8:* = new MapPathLink();
            _loc_7[param1] = _loc_8;
            _loc_5.push(param1);
            _loc_6[param1] = true;
            while (_loc_5.length > 0)
            {
                
                _loc_11 = _loc_5.shift();
                _loc_12 = _loc_7[_loc_11];
                _loc_13 = SceneConfig.instance.getSceneInfo(_loc_11);
                _loc_14 = false;
                if (_loc_13 == null)
                {
                    continue;
                }
                for each (_loc_15 in _loc_13.passInfos)
                {
                    
                    if (_loc_15.passTo == null || _loc_15.passTo[0] == null)
                    {
                        continue;
                    }
                    if (!ThingUtil.passUtil.isAddToStage(_loc_15))
                    {
                        continue;
                    }
                    _loc_16 = _loc_15.passTo[0] as SPassTo;
                    _loc_17 = _loc_16.mapId;
                    if (PassUtil.isPassToCopyType(_loc_16) || PassUtil.isPassToSameServerBossHodType(_loc_16))
                    {
                        _loc_18 = CopyConfig.instance.getCopyInfoByCode(_loc_17);
                        _loc_17 = _loc_18.intoMapId;
                    }
                    if (_loc_6[_loc_17])
                    {
                        continue;
                    }
                    _loc_6[_loc_17] = true;
                    _loc_5.push(_loc_17);
                    _loc_8 = new MapPathLink();
                    _loc_8.parent = _loc_12;
                    _loc_8.value = _loc_15;
                    _loc_7[_loc_17] = _loc_8;
                    if (_loc_17 == param2)
                    {
                        _loc_9 = _loc_8;
                        _loc_14 = true;
                        break;
                    }
                }
                if (_loc_14)
                {
                    break;
                }
            }
            if (_loc_9 == null)
            {
                return null;
            }
            var _loc_10:* = new Vector.<SPassPoint>;
            while (_loc_9.parent != null)
            {
                
                _loc_10.unshift(_loc_9.value);
                _loc_9 = _loc_9.parent;
            }
            return _loc_10;
        }// end function

        private static function pushToList(param1:SceneInfo, param2:Array) : void
        {
            var _loc_3:SPassPoint = null;
            for each (_loc_3 in param1.passInfos)
            {
                
            }
            return;
        }// end function

        private static function addToList(param1:SceneInfo, param2:Array, param3:Dictionary, param4:MapPathLink) : void
        {
            var _loc_5:SPassPoint = null;
            var _loc_6:MapPathLink = null;
            var _loc_7:SPassTo = null;
            for each (_loc_10 in param1.passInfos)
            {
                
                _loc_5 = _loc_9[_loc_8];
                param2.push(_loc_5);
                _loc_6 = new MapPathLink();
                var _loc_10:* = _loc_5;
                _loc_6.value = _loc_5;
                var _loc_10:* = param4;
                _loc_6.parent = param4;
                _loc_7 = _loc_5.passTo[0];
                var _loc_10:* = _loc_6;
                param3[_loc_7.mapId] = _loc_6;
            }
            return;
        }// end function

    }
}
